package com.ruoyi.course.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.course.domain.Course;
import com.ruoyi.course.domain.StudentAndCourse;
import com.ruoyi.monitor.domain.Monitor;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 课程列表Service接口
 *
 * @author ruoyi
 * @date 2024-10-17
 */
public interface ICourseService extends IService<Course> {

    /**
     * 查询课程列表
     *
     * @param id 课程列表主键
     * @return 课程列表
     */
    Course selectCourseById(Long id);

    /**
     * 查询课程列表列表
     *
     * @param course 课程列表
     * @return 课程列表集合
     */
    List<Course> selectCourseList(Course course);

    /**
     * 新增课程列表
     *
     * @param course 课程列表
     * @return 结果
     */
    int insertCourse(Course course);

    /**
     * 修改课程列表
     *
     * @param course 课程列表
     * @return 结果
     */
    int updateCourse(Course course);

    /**
     * 批量删除课程列表
     *
     * @param ids 需要删除的课程列表主键集合
     * @return 结果
     */
    int deleteCourseByIds(Long[] ids);

    /**
     * 删除课程列表信息
     *
     * @param id 课程列表主键
     * @return 结果
     */
    int deleteCourseById(Long id);

    /**
     * 导入课程数据
     *
     * @param courseList      课程列表
     * @param isUpdateSupport 是否更新支持，如果已存在，则进行更新数据
     * @param operName        操作用户
     * @return 结果
     */
    String importCourse(List<Course> courseList, Boolean isUpdateSupport, String operName);

    /**
     * 获取当日学生课程
     *
     * @param id
     * @return
     */
    List<StudentAndCourse> getTodayCourse(Long id);

    /**
     * 获取当前时间有效课程
     *
     * @param monitor
     * @return
     */
    Course getNowCourse(Monitor monitor);

    /**
     * 判断当前时间是否在课程时间内
     *
     * @param course
     * @return
     */
    Boolean isExpireNow(Course course);

    /**
     * 判断今天是否在课程时间内
     *
     * @param course
     * @return
     */
    Boolean isExpireToday(Course course);

    /**
     * 按指定格式拆分返回时间
     *
     * @param stringTime
     * @param splitMethod
     * @param dateTimeFormat
     * @return
     */
    List<LocalDateTime> parseTime(String stringTime, String splitMethod, String dateTimeFormat);
}
